package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISocDispatchCompanyDAO;
import org.jsola.hr.dto.SocDispatchCompanyAddDTO;
import org.jsola.hr.dto.SocDispatchCompanyUpdateDTO;
import org.jsola.hr.dto.SocDispatchEmpFeedBackDTO;
import org.jsola.hr.entity.SocDispatchCompanyDO;
import org.jsola.hr.entity.SocDispatchDO;
import org.jsola.hr.query.SocDispatchCompanyQuery;
import org.jsola.hr.query.SocDispatchEmpAddQuery;
import org.jsola.hr.query.SocDispatchEmpLessQuery;
import org.jsola.hr.vo.*;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 社保派单公司记录表
 *
 * @author zhr
 */
public interface ISocDispatchCompanyService extends IService<ISocDispatchCompanyDAO, SocDispatchCompanyDO> {

    /**
     * 新增社保派单公司记录表
     *
     * @param socDispatchCompanyAddDTO 新增社保派单公司记录表DTO
     * @param tokenUser                当前用户
     * @return 社保派单公司记录表详情信息
     */
    SocDispatchCompanyVO save(SocDispatchCompanyAddDTO socDispatchCompanyAddDTO, TokenUser tokenUser);

    /**
     * 修改社保派单公司记录表
     *
     * @param socDispatchCompanyUpdateDTO 修改社保派单公司记录表DTO
     * @param tokenUser                   当前用户
     * @return 更新数量
     */
    int update(SocDispatchCompanyUpdateDTO socDispatchCompanyUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除社保派单公司记录表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser             当前用户
     * @param socDispatchCompanyIds 社保派单公司记录表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... socDispatchCompanyIds);

    /**
     * 根据社保派单公司记录表id查找
     *
     * @param socDispatchCompanyId 社保派单公司记录表id
     * @param siteId               所属站点id
     * @return 社保派单公司记录表详情信息
     */
    SocDispatchCompanyVO selectById(String socDispatchCompanyId, String siteId);

    /**
     * 查询社保派单公司记录表
     *
     * @param socDispatchCompanyQuery 查询条件
     * @param siteId                  所属站点id
     * @return 社保派单公司记录表列表信息
     */
    List<SocDispatchCompanyListVO> select(SocDispatchCompanyQuery socDispatchCompanyQuery, String siteId);

    /**
     * 查询社保派单公司记录表记录数
     *
     * @param socDispatchCompanyQuery 查询条件
     * @param siteId                  所属站点id
     * @return 社保派单公司记录表记录数
     */
    int selectCount(SocDispatchCompanyQuery socDispatchCompanyQuery, String siteId);

    /**
     * 分页查询社保派单公司记录表
     *
     * @param socDispatchCompanyQuery 查询条件
     * @param tokenUser               当前用户
     * @return 社保派单公司记录表列表信息
     */
    Page<SocDispatchCompanyListVO> selectPage(SocDispatchCompanyQuery socDispatchCompanyQuery, TokenUser tokenUser);


    /**
     * 根据社保派单公司记录表id查找
     *
     * @param socDispatchCompanyId 社保派单公司记录表id
     * @param siteId               所属站点id
     * @return 社保派单公司记录表
     */
    SocDispatchCompanyDO selectDOById(String socDispatchCompanyId, String siteId);

    /**
     * 查询社保派单公司记录表
     *
     * @param socDispatchCompanyQuery 查询条件
     * @param siteId                  所属站点id
     * @return 社保派单公司记录表列表
     */
    List<SocDispatchCompanyDO> selectDO(SocDispatchCompanyQuery socDispatchCompanyQuery, String siteId);

    /**
     * 生成公司的派单记录
     *
     * @param socDispatch          派单记录信息
     * @param socDispatchEmpIdList 派单员工表Id
     * @param tokenUser            当前用户
     */
    void addCompanySocDispatch(SocDispatchDO socDispatch, List<String> socDispatchEmpIdList, TokenUser tokenUser);

    /**
     * 根据公司社保派单记录获取详情
     *
     * @param socDispatchCompanyId 公司社保派单记录
     * @param siteId               站点id
     * @return 公司社保派单记录详情
     */
    SocDispatchCompanyDetailsVO findCompanyDetailsById(String socDispatchCompanyId, String siteId);


    /**
     * 分页查询社保派单员工表_增员
     *
     * @param socDispatchEmpAddQuery 查询条件
     * @param siteId                 所属站点id
     * @return 社保派单员工表_增员列表信息
     */
    Page<SocDispatchEmpAddListVO> pageEmpAdd(SocDispatchEmpAddQuery socDispatchEmpAddQuery, String socDispatchCompanyId, String siteId);


    /**
     * 分页查询社保派单员工表_减员
     *
     * @param socDispatchEmpLessQuery 查询条件
     * @param siteId                  所属站点id
     * @return 社保派单员工表_减员列表信息
     */
    Page<SocDispatchEmpLessListVO> pageEmpLess(SocDispatchEmpLessQuery socDispatchEmpLessQuery, String socDispatchCompanyId, String siteId);

}


